컴퓨터과학
어셈블리_07_GDB(GNU Debugger)를 이용한 런타임 분석
작성자 : Heehyeon Yoo|2025-10-15
# Assembly# GDB# Debugging# Dynamic Analysis
동적 분석은 프로그램을 실행시키며 내부 상태 변화를 추적하는 기법이다. 소스 코드가 없는 상황에서 프로그램의 동작 원리를 파악하는 데 필수적이다. 리눅스 표준 디버거인 GDB의 핵심 명령어 4가지를 정리한다.
1. Breakpoint(중단점)
break *0x401000(b): 특정 메모리 주소에 중단점을 설정한다. CPU가 해당 주소에 도달하면 실행을 멈춘다.delete: 설정된 중단점을 제거한다.
2. Stepping(단계별 실행)
소스 코드가 아닌 기계어 명령어(Instruction) 단위로 제어해야 한다.
ni(Next Instruction): 명령어 한 줄을 실행한다. 함수 호출(CALL) 시 함수 내부로 진입하지 않고 건너뛴다(Step Over).si(Step Instruction): 명령어 한 줄을 실행하되, 함수 호출 시 내부로 진입한다(Step Into). 세부 동작 분석 시 사용한다.
3. Examine(메모리 검사)
x 명령어를 사용하여 메모리 내용을 직접 확인한다.
x/i $rip: 현재 실행 대기 중인 명령어를 어셈블리 코드로 출력한다.x/s 0x402000: 해당 주소의 데이터를 문자열(String)로 출력한다.x/10gx $rsp: 스택 영역($rsp)의 데이터를 8바이트 단위로 10개 출력한다. 스택 프레임, 리턴 주소 확인 시 유용하다.
4. Info(정보 확인)
info registers(i r): 전체 레지스터의 값을 출력한다. 연산 결과나 플래그 상태를 확인한다.
Advanced: GDB 플러그인 활용
순정 GDB는 화면이 불친절하여 분석 효율이 떨어진다. 현업에서는 Pwndbg, GEF, Peda 같은 플러그인을 설치하여 사용한다. 레지스터, 스택, 소스 코드 상태를 한 화면에서 시각적으로 보여주므로 학습 시 설치하는 것을 강력 추천한다.